// 1789.[合并区间] 简易内存池.中 https://oj.rnd.huawei.com/problems/1789/details
// 1.内存池总大小为100字节。
// 2.内存池地址分配必须是连续内存，并优先从低地址分配。
// 3.内存释放后可被再次分配，已释放的内存在空闲时不能被二次释放。
// 4.不会释放已申请的内存块的中间地址。
// 5.释放操作只是针对首地址所对应的单个内存块进行操作，不会影响其它内存块。
// 输入 5
// REQUEST=10
// REQUEST=20
// RELEASE=0
// REQUEST=20
// REQUEST=10
// 输出 0
// 10
// 30
// 0
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
class MiniMemoryPool {
 public:
  const static int POOL_SIZE = 100;
  std::map<int, int> mapAllocated_;
  int Request(int size) {
    if (size == 0) {
      return -1;
    }
    if (mapAllocated_.size() == 0) {
      if (size <= POOL_SIZE) {
        mapAllocated_.insert({0, size - 1});
        return 0;
      } else {
        return -1;
      }
    }
    std::vector<std::pair<int, int> > vtMem;
    for (auto kv : mapAllocated_) {
      vtMem.emplace_back(kv);
    }
    for (size_t i = 0; i < vtMem.size(); i++) {
      if (i == 0 && size <= vtMem[i].first) {
        mapAllocated_.insert({0, size - 1});
        return 0;
      } else if (i == vtMem.size() - 1 &&
                 size <= (POOL_SIZE - vtMem[i].second - 1)) {
        mapAllocated_.insert({vtMem[i].second + 1, vtMem[i].second + size});
        return vtMem[i].second + 1;
      } else if (i < vtMem.size() - 1 &&
                 vtMem[i].second + size < vtMem[i + 1].first) {
        mapAllocated_.insert({vtMem[i].second + 1, vtMem[i].second + size});
        return vtMem[i].second + 1;
      }
    }
    return -1;
  }
  // 释放内存地址, 成功返回 true, 失败返回 false
  bool Release(int startAddr) {
    for (auto it = mapAllocated_.begin(); it != mapAllocated_.end();) {
      if (it->first == startAddr) {
        mapAllocated_.erase(it++);
        return true;
      } else {
        it++;
      }
    }
    return false;
  }
};
int main() {
  int num;
  cin >> num;
  MiniMemoryPool pool;
  for (int loop = 0; loop < num; loop++) {
    string line;
    cin >> line;
    string commond = line.substr(0, line.find_first_of('='));
    if (commond == "REQUEST") {
      int size = stoi(line.substr(line.find_first_of('=') + 1));
      int result = pool.Request(size);
      if (result != -1) {
        cout << result << endl;
      } else {
        cout << "error" << endl;
      }
    } else if (commond == "RELEASE") {
      int addr = stoi(line.substr(line.find_first_of('=') + 1));
      if (!pool.Release(addr)) {
        cout << "error" << endl;
      }
    }
  }
  return 0;
}